home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 051-075 / 071 / amibas / comp (.txt) < prev    next >
AmigaBASIC Source Code  |  1995-03-13  |  3KB  |  84 lines

  1. '" Comp ,  Compare Two Files
  2. '" P. Kittel, CBM Ffm, Start 11.01.87, 24.02.87
  3.  
  4. PRINT "Comp  -  Compare Two Files.":PRINT 
  5. PRINT "Filename 1 ?":LINE INPUT f1$:PRINT 
  6. PRINT "Filename 2 ?":LINE INPUT f2$
  7. PRINT 
  8. PRINT "Show contents (mark differences) (y/n) ? ";
  9. a$="":WHILE a$<>"y" AND a$<>"n":a$=INKEY$:WEND
  10. fi=a$="y":PRINT a$:PRINT 
  11.  
  12. PRINT "Abort process with q key, pause with any.":PRINT 
  13.  
  14. OPEN f1$ FOR INPUT AS 1:l1=LOF(1)
  15. OPEN f2$ FOR INPUT AS 2:l2=LOF(2)
  16. fuu=0:IF l1<>l2 THEN PRINT :PRINT "Files unequal, different in length!":PRINT :fuu=-1
  17.    
  18. n=1000:n1=0:n2=0:fu=0:m=0:m1$="":m2$="":mn=0
  19. WHILE n1<l1 AND (fu=0 OR fi) AND a$<>"q" '" loop for file 1
  20.   a$=INKEY$:IF a$<>"" THEN GOSUB taste   '" pause or abort?
  21.   IF n1+n>l1 THEN n=l1-n1
  22.   i1$=INPUT$(n,1)  '" read from files
  23.   IF n2+n>l2 THEN
  24.     IF n2<l2 THEN i2$=INPUT$(l2-n2,2) :ELSE i2$=""
  25.              ELSE
  26.     i2$=INPUT$(n,2)
  27.     END IF
  28.   n3=n1:n1=n1+n:n2=n2+n
  29.   IF fi THEN                      '" show contents as hexdump
  30.     FOR j=1 TO LEN(i1$)
  31.       IF m>15 THEN GOSUB inhalt
  32.       m1$=m1$+MID$(i1$,j,1)
  33.       m2$=m2$+MID$(i2$,j,1)
  34.       m  =m+1
  35.       NEXT
  36.     END IF
  37.       
  38.   IF i1$<>i2$ AND fu=0 THEN      '" tell when unequal
  39.     i=1
  40.     FOR j=1 TO LEN(i1$)
  41.       IF MID$(i1$,j,1)<>MID$(i2$,j,1) THEN i=j:j=1e+09
  42.       NEXT
  43.     PRINT "Files unequal from byte";i+n3
  44.     fu=-1
  45.     END IF
  46.   WEND
  47. IF fi THEN IF m>0 THEN GOSUB inhalt  '" show rest of contents
  48.   
  49. IF fu=0 AND fuu=0 THEN PRINT :PRINT "Files equal." :ELSE PRINT :PRINT "Files unequal."
  50. CLOSE 1:CLOSE 2
  51. END
  52.  
  53. inhalt:   '" subroutine for hexdump
  54. a$=INKEY$:IF a$<>"" THEN GOSUB taste
  55. PRINT RIGHT$("000"+HEX$(mn),4);" ";  '" address in file
  56. FOR jj=1 TO LEN(m1$)                 '" loop for one line
  57.   j1$=MID$(m1$,jj,1):j2$=MID$(m2$,jj,1)
  58.   IF j1$<>j2$ THEN COLOR 3  '" mark differences by color
  59.   PRINT RIGHT$("0"+HEX$(ASC(j1$)),2);" ";  '" single byte in hex
  60.   COLOR 1
  61.   NEXT
  62. PRINT SPC(2+3*(16-LEN(m1$)));        '" show also as character on the right
  63. FOR jj=1 TO LEN(m1$)
  64.   j1=ASC(MID$(m1$,jj,1))
  65.   IF j1<32 THEN
  66.     COLOR 2:PRINT CHR$(j1+64);:COLOR 1  '" mark control chars by color
  67.            ELSE
  68.     PRINT CHR$(j1);
  69.     END IF
  70.   NEXT
  71. PRINT 
  72. mn=mn+LEN(m1$):m1$="":m2$="":m=0
  73. RETURN
  74.  
  75. taste:  '" subroutine for pause by key pressed
  76. IF a$<>"q" THEN a$="":WHILE a$="":a$=INKEY$:WEND '" wait for next key
  77. IF a$="q" THEN  '" q key for end of program
  78.   IF fu=0 AND fuu=0 THEN PRINT :PRINT "Files equal." :ELSE PRINT :PRINT "Files unequal."
  79.   CLOSE 1:CLOSE 2
  80.   END
  81.   END IF
  82. RETURN
  83.  
  84.